Processor-based systems, such as personal computers, typically include a motherboard on which a main processor and memory are disposed. Additionally, the motherboard includes a number of slots into which peripherals may be installed. For example, a personal computer may include peripherals such as a hard drive controller, a display or graphics adapter, a network adapter and a modem, each of which is installed into a slot on the motherboard or is in communication with the motherboard through other means.
Each of the peripherals associated with the processor system includes a memory portion that stores configuration or operation information and data for the peripheral. This information and data is commonly referred to as firmware. The firmware is typically stored in some non-volatile (NV) storage, such as non-volatile random access memory (NVRAM), of which flash memory is one particular example.
Ideally, peripherals are bug free and their firmware is timeless. However, in reality firmware upgrades need to be made to correct bugs and to update firmware for interoperability. The firmware on the peripherals is not, however, openly exposed at a user interface that enables user maintenance of the firmware. The motherboard processor is unable to update the peripheral firmware because the basic input/output system (BIOS) of the processor is unaware of the layout, access methods and protection of the firmware on the peripherals. Accordingly, updating peripheral firmware can be very challenging. Adding to this difficulty, there is presently no standard methodology for carrying out firmware updates on peripherals. For example, some peripheral vendors ship operating system (OS)-specific drivers when firmware upgrades are required. However, such upgrades are not OS agnostic, meaning that a special driver must be written for each OS. For example, if a peripheral vendor wants to distribute a firmware upgrade, the vendor must distribute a Linux version, a Windows NT version, a Windows 95 version, etc.